{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.5 图像分类数据集Fashion-mnist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "import matplotlib.pyplot as plt\n",
    "import time\n",
    "import sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "mnist_train = torchvision.datasets.FashionMNIST(\n",
    "    root='./Datasets', train=True, download=False, \n",
    "    transform=transforms.ToTensor())\n",
    "mnist_test = torchvision.datasets.FashionMNIST(\n",
    "    root='./Datasets', train=False, download=False,\n",
    "    transform=transforms.ToTensor())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'torchvision.datasets.mnist.FashionMNIST'>\n",
      "60000 10000\n"
     ]
    }
   ],
   "source": [
    "print(type(mnist_train))\n",
    "print(len(mnist_train), len(mnist_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_fashion_mnist_labels(labels):\n",
    "    text_labels = [['t-shirt'], ['trouser'], ['pullover'], ['dress'], \n",
    "                   ['coat'], ['sandal'], ['shirt'], ['sneaker'], \n",
    "                   ['bag'], ['ankle'] ]\n",
    "    return [text_labels[int(i)] for i in labels ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "def show_fashion_mnist(images, labels):\n",
    "    #d2l.use_svg_display()\n",
    "    #display.set_matplotlib_formats('svg')\n",
    "    _, figs = plt.subplots(1, len(images), figsize=(12, 12))\n",
    "    for f, img, lbl in zip(figs, images, labels):\n",
    "        f.imshow(img.view((28, 28)).numpy())\n",
    "        f.set_title(lbl)\n",
    "        f.axes.get_xaxis().set_visible(False)\n",
    "        f.axes.get_yaxis().set_visible(False)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x864 with 10 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看训练集中的数据样本\n",
    "X, y = [], []\n",
    "for i in range(10):\n",
    "    X.append(mnist_train[i][0])\n",
    "    y.append(mnist_train[i][1])\n",
    "show_fashion_mnist(X, get_fashion_mnist_labels(y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32    # 256\n",
    "if sys.platform.startswith('win'):\n",
    "    num_workers = 0\n",
    "else:\n",
    "    num_workers = 4\n",
    "train_iter = torch.utils.data.DataLoader(mnist_train, \n",
    "            batch_size=batch_size, shuffle=True, num_workers=num_workers)\n",
    "test_iter = torch.utils.data.DataLoader(mnist_test, \n",
    "            batch_size=batch_size, shuffle=False, num_workers=num_workers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.76 sec\n"
     ]
    }
   ],
   "source": [
    "start = time.time()\n",
    "for X, y in train_iter:\n",
    "    continue\n",
    "print('%.2f sec' % (time.time() - start))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.6 Softmax回归的从零开始实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], requires_grad=True)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "num_inputs = 784\n",
    "num_outputs = 10\n",
    "\n",
    "W = torch.tensor(np.random.normal(0, 0.01, (num_inputs, num_outputs)),\n",
    "                dtype=torch.float)\n",
    "b = torch.zeros(num_outputs, dtype=torch.float)\n",
    "W.requires_grad_(requires_grad=True)\n",
    "b.requires_grad_(requires_grad=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def softmax(X):\n",
    "    X_exp = X.exp()\n",
    "    partition = X_exp.sum(dim=1, keepdim=True)\n",
    "    return X_exp / partition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[0.5930, 0.7122, 0.7913, 0.5796, 0.9969],\n",
      "        [0.1667, 0.0040, 0.6740, 0.6043, 0.0338]])\n",
      "tensor([[0.1715, 0.1932, 0.2091, 0.1692, 0.2569],\n",
      "        [0.1685, 0.1432, 0.2798, 0.2610, 0.1475]])\n",
      "tensor([1., 1.])\n"
     ]
    }
   ],
   "source": [
    "X = torch.rand((2, 5))\n",
    "X_prob = softmax(X)\n",
    "print(X)\n",
    "print(X_prob)\n",
    "print(X_prob.sum(dim=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "def net(X):\n",
    "    return softmax(torch.mm(X.view(-1, num_inputs), W) + b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.1000],\n",
       "        [0.5000]])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])\n",
    "y = torch.LongTensor([0, 2])\n",
    "y_hat.gather(1, y.view(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cross_entropy(y_hat, y):\n",
    "    return - torch.log(y_hat.gather(1, y.view(-1, 1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def accuracy(y_hat, y):\n",
    "    return (y_hat.argmax(dim=1) == y).float().mean().item()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5\n"
     ]
    }
   ],
   "source": [
    "print(accuracy(y_hat, y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_accuracy(data_iter, net):\n",
    "    acc_sum, n = 0.0, 0\n",
    "    for X, y in data_iter:\n",
    "        acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()\n",
    "        n += y.shape[0]\n",
    "    return acc_sum / n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0384\n"
     ]
    }
   ],
   "source": [
    "print(evaluate_accuracy(test_iter, net))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sgd(params, lr, batch_size):\n",
    "    for param in params:\n",
    "        param.data -= lr * param.grad / batch_size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, \n",
    "             params=None, lr=None, optimizer=None):\n",
    "    for epoch in range(num_epochs):\n",
    "        train_l_sum, train_acc_sum, n = 0.0, 0.0, 0\n",
    "        for X, y in train_iter:\n",
    "            y_hat = net(X);\n",
    "            l = loss(y_hat, y).sum()\n",
    "            \n",
    "            # 梯度清零\n",
    "            if optimizer is not None:\n",
    "                optimizer.zero_grad()\n",
    "            elif params is not None and params[0].grad is not None:\n",
    "                for param in params:\n",
    "                    param.grad.data.zero_()\n",
    "            \n",
    "            # 反向求loss函数对各变量的偏导数，即梯度\n",
    "            l.backward()\n",
    "            if optimizer is None:\n",
    "                sgd(params, lr, batch_size)\n",
    "            else:\n",
    "                optimizer.step()\n",
    "                \n",
    "            train_l_sum += l.item()\n",
    "            train_acc_sum += (y_hat.argmax(dim=1) == y).sum().item()\n",
    "            n += y.shape[0]\n",
    "            \n",
    "        test_acc = evaluate_accuracy(test_iter, net)\n",
    "        print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f' \n",
    "             % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 1, loss 0.4386, train acc 0.848, test acc 0.828\n",
      "epoch 2, loss 0.4354, train acc 0.850, test acc 0.829\n",
      "epoch 3, loss 0.4305, train acc 0.851, test acc 0.835\n",
      "epoch 4, loss 0.4316, train acc 0.851, test acc 0.826\n",
      "epoch 5, loss 0.4258, train acc 0.852, test acc 0.844\n",
      "epoch 6, loss 0.4228, train acc 0.853, test acc 0.820\n",
      "epoch 7, loss 0.4231, train acc 0.853, test acc 0.838\n",
      "epoch 8, loss 0.4194, train acc 0.856, test acc 0.843\n",
      "epoch 9, loss 0.4183, train acc 0.856, test acc 0.834\n",
      "epoch 10, loss 0.4169, train acc 0.856, test acc 0.822\n"
     ]
    }
   ],
   "source": [
    "num_epochs, lr = 10, 0.1\n",
    "\n",
    "train_ch3(net, train_iter, test_iter, cross_entropy, num_epochs, \n",
    "          batch_size, [W, b], lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = iter(test_iter).next()\n",
    "\n",
    "true_labels = get_fashion_mnist_labels(y.numpy())\n",
    "pred_labels = get_fashion_mnist_labels(net(X).argmax(dim=1).numpy())\n",
    "titles = [true + '\\n' + pred \n",
    "          for true, pred in zip(true_labels, pred_labels)]\n",
    "show_fashion_mnist(X[0:9], titles[0:9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7],\n",
       "        [ 8,  9, 10, 11],\n",
       "        [12, 13, 14, 15]])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = torch.arange(0, 16).view(4, 4)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0,  5, 10, 15]])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index0 = torch.LongTensor([[0, 1, 2, 3]])\n",
    "a.gather(0, index0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[12,  9,  6,  3]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index1 = torch.LongTensor([[3, 2, 1, 0]])\n",
    "a.gather(0, index1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0],\n",
       "        [ 5],\n",
       "        [10],\n",
       "        [15]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.gather(1, index0.t())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 3],\n",
       "        [ 6],\n",
       "        [ 9],\n",
       "        [12]])"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.gather(1, index1.t())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
